package com.iaz.tech.tools.tasks.schedule;

import com.iaz.tech.tools.tasks.ability.IScheduleAble;
import com.iaz.tech.tools.tasks.ability.ITaskItemAble;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

/**
 * 任务项目
 * 用于记录任务次数
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class ScheduleItem extends ISchedule{
    /**
     * 日志
     */
    private final static Logger logger = (Logger) LoggerFactory.getLogger( ScheduleItem.class );
    /**
     * 计划执行次数，默认为1
     */
    private long planCount = 0L;
    /**
     * 实际执行次数，每次执行
     */
    private long invokedCount = 0L;
    /**
     * 需要具体执行任务
     */
    private ITaskItemAble taskItem = null;

    /**
     * 获得子任务项目
     */
    @Override
	public Map<Long, IScheduleAble> children() {
		return null;
	}
    /**
     * 执行任务项目
     */
    @Override
    public void execute(Object sender) {
        try {
            if (this.taskItem != null) {
                this.taskItem.execute(sender);
            }
        } catch( Exception e) {
            logger.error("执行execute 异常，错误信息：" + e.getMessage());
        }
    }
    /**
     * 转换为任务元素
     */
    @Override
    public IScheduleAble toElement() {
         return this;
    } 
    
    @Override
    public void stop() {
        this.taskItem = null;
    }
}
